package com.xq.aop.aspectj;

import org.aspectj.lang.ProceedingJoinPoint;

/**
 * @author xq
 * @version 1.0
 * @date 2021/4/6 15:15
 * @description 我的通知类
 */
public class MyAdvise {
    /**
     * 前置通知
     */
    public void before() {
        System.out.println("先前拿水果种子");
    }

    /**
     * 后置通知
     */
    public void after() {
        System.out.println("水果播种后浇水");
    }

    /**
     * 循环通知
     * @param pj 连接点
     */
    public void around(ProceedingJoinPoint pj) {
        try {
            before();
            // 执行目标对象的方法
            pj.proceed();
            after();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    /**
     * 异常通知
     * @param tw 必须和applicationContext.xml里面的throwing="tw"一样
     */
    public void exception(Throwable tw){
        System.out.println("发生异常");
        System.out.println(tw.getMessage());
    }
}
